import { Controller, Post, Body, Get, Param, Put, Delete, UseGuards } from '@nestjs/common';
import { UserService } from './user.service';
import { LoginUserDTO } from 'src/dto/user/login-user.dto';
import { CreateUserDTO } from 'src/dto/user/create-user.dto';
import { UpdateUserDTO } from 'src/dto/user/update-user.dto';
import { ApiTags, ApiOperation, ApiResponse, ApiBearerAuth } from '@nestjs/swagger';
import { AuthGuard } from 'src/core/auth/auth.guard';
// UserController

// - 提供用户相关API接口：
//   - 登录（无需认证）
//   - 创建、查询、更新、删除用户（需要认证）
// - 使用Swagger装饰器添加API文档
@ApiTags('用户管理')
@Controller('user')
export class UserController {
  constructor(private readonly userService: UserService) {}

  /**
   * 用户登录
   * @param loginUserDTO 登录信息
   * @returns 用户信息和token
   */
  @ApiOperation({ summary: '用户登录' })
  @ApiResponse({ status: 200, description: '登录成功' })
  @ApiResponse({ status: 401, description: '认证失败' })
  @Post('login')
  async login(@Body() loginUserDTO: LoginUserDTO) {
    return this.userService.login(loginUserDTO.account, loginUserDTO.password);
  }

  /**
   * 创建用户
   * @param createUserDTO 用户创建信息
   * @returns 创建的用户
   */
  @ApiOperation({ summary: '创建用户' })
  @ApiResponse({ status: 201, description: '创建成功' })
  @ApiResponse({ status: 400, description: '参数错误' })
  @ApiBearerAuth()
  @UseGuards(AuthGuard)
  @Post()
  async create(@Body() createUserDTO: CreateUserDTO) {
    return this.userService.create(createUserDTO);
  }

  /**
   * 获取所有用户
   * @returns 用户列表
   */
  @ApiOperation({ summary: '获取所有用户' })
  @ApiResponse({ status: 200, description: '查询成功' })
  @ApiBearerAuth()
  @UseGuards(AuthGuard)
  @Get()
  async findAll() {
    return this.userService.findAll();
  }

  /**
   * 根据ID获取用户
   * @param id 用户ID
   * @returns 用户信息
   */
  @ApiOperation({ summary: '根据ID获取用户' })
  @ApiResponse({ status: 200, description: '查询成功' })
  @ApiResponse({ status: 404, description: '用户不存在' })
  @ApiBearerAuth()
  @UseGuards(AuthGuard)
  @Get(':id')
  async findOne(@Param('id') id: number) {
    return this.userService.findOneById(id);
  }

  /**
   * 更新用户
   * @param id 用户ID
   * @param updateUserDTO 用户更新信息
   * @returns 更新后的用户
   */
  @ApiOperation({ summary: '更新用户' })
  @ApiResponse({ status: 200, description: '更新成功' })
  @ApiResponse({ status: 400, description: '参数错误' })
  @ApiResponse({ status: 404, description: '用户不存在' })
  @ApiBearerAuth()
  @UseGuards(AuthGuard)
  @Put(':id')
  async update(@Param('id') id: number, @Body() updateUserDTO: UpdateUserDTO) {
    return this.userService.update(id, updateUserDTO);
  }

  /**
   * 删除用户
   * @param id 用户ID
   * @returns 删除结果
   */
  @ApiOperation({ summary: '删除用户' })
  @ApiResponse({ status: 200, description: '删除成功' })
  @ApiResponse({ status: 404, description: '用户不存在' })
  @ApiBearerAuth()
  @UseGuards(AuthGuard)
  @Delete(':id')
  async remove(@Param('id') id: number) {
    return this.userService.remove(id);
  }
}
